package cn.lutu.domain.repository;

import cn.lutu.protocol.entity.Article;
import cn.lutu.protocol.entity.ArticleContent;
import cn.lutu.protocol.entity.Collect;
import cn.lutu.protocol.entity.Up;
import cn.lutu.protocol.search.ArticleSearchVO;
import cn.lutu.protocol.vo.*;
import cn.lutu.util.pojo.vo.PageData;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Transactional
public interface ArticleRepository {
    //插入文章
    int insert(Article article);

    //插入文章内容
    int insertContent(ArticleContent articleContent);

    //获取全部文章列表
    PageData<ArticleListVO> selectAll(Integer pageNum, Integer pageSize);

    //获取热门文章列表
    List<ArticleListVO> selectHotArt();

    //获取最近文章列表
    List<ArticleListVO> selectRecent();

    //搜索文章
    List<ArticleListVO> selectSearch(String textSearch);

    //获取热搜标题列表
    List<HotListVO> selectHot();

    //获取文章详情
    ArticleDetailVO selectArticleDetail(Long id);

    //收藏文章
    int insertArticle(Collect collect);

    //取消收藏
    int deleteCollectById(Long userId,Long articleId);

    //修改收藏数
    void updateCollect(Article article);

    //点赞文章
    int insertUp(Up Up);

    //取消点赞
    int deleteUpById(Long userId,Long articleId);

    //获取点赞信息
    ArticleUpVO selectUp(Long userId,Long articleId);

    //获取收藏信息
    ArticleCollectVO selectCollect(Long userId,Long articleId);

    //删除文章
    void deleteById(Long id);

    //获取作者其他文章
    PageData<ArticleOthersListVO> selectByUserId(Integer pageNum, Integer pageSize,Long userId);

    //获取个人点赞的文章列表
    PageData<ArticleOthersListVO> selectArticleUp(Integer pageNum, Integer pageSize, Long userId);

    //获取个人收藏的文章列表
    PageData<ArticleOthersListVO> selectArticleCollect(Integer pageNum, Integer pageSize,Long userId);

    //获取待审核文章列表
    PageData<ArticleListVO> selectUnCheck(Integer pageNum, Integer pageSize);

    //审核通过业务
    int updateCheck(Article article);

    /*根据ID统计文章数据*/
    int selectCount(Long articleId);

    //获取审核不通过文章列表
    List<ArticleListVO> rejectCheckList();

    //获取个人审核不通过文章列表
    List<ArticleListVO> rejectCheckListById(Long userId);

    PageData<ArticleSearchVO> listSearchVO(Integer pageNum,Integer pageSize);


}
